// 现代 JavaScript 变量声明
// 作者：AI助手
// 最后更新：2024年

/**
 * 现代 JavaScript 中的变量声明
 * 1. let: 块级作用域变量
 * 2. const: 常量
 * 3. var: 函数作用域变量（不推荐使用）
 */

// 1. let 声明
let count = 1;
{
    let count = 2; // 新的块级作用域
    console.log('块级作用域内:', count); // 输出: 2
}
console.log('块级作用域外:', count); // 输出: 1

// 2. const 声明
const PI = 3.14159;
// PI = 3.14; // 错误！常量不能重新赋值

// const 对象的属性可以修改
const user = {
    name: '张三',
    age: 25
};
user.age = 26; // 这是允许的
// user = {}; // 错误！不能重新赋值

// 3. 最佳实践
// ✅ 优先使用 const
const MAX_ITEMS = 100;
const config = {
    apiUrl: 'https://api.example.com',
    timeout: 5000
};

// ✅ 当需要重新赋值时使用 let
let currentUser = 'guest';
let score = 0;

// ❌ 避免使用 var
// var oldWay = 'avoid this'; // 不推荐

// 4. 临时死区（TDZ）示例
{
    // console.log(blockScoped); // 错误！TDZ
    let blockScoped = 'hello';
    console.log(blockScoped); // 正常工作
}

// 5. 实际应用示例
function calculateTotal(items) {
    let total = 0; // 使用 let 因为需要修改
    const TAX_RATE = 0.1; // 使用 const 因为是固定值
    
    for (const item of items) { // 使用 const 因为不需要修改循环变量
        total += item.price;
    }
    
    return total * (1 + TAX_RATE);
}

// 测试代码
const items = [
    { name: '商品1', price: 100 },
    { name: '商品2', price: 200 }
];
console.log('总价（含税）:', calculateTotal(items)); 